/*
 * Zadanie 5 7
 *
 * 1) Wykonaj alokację tablicy jak poniżej
 * 2) Wypełnij tablicę zawartością jak poniżej i wyświetl
 * 3) Wyświetl tablicę
 * 4) Zwolnij zaalokowaną w poprzednim punkcie tablicę
 *
 * Pojedyńczy element tablicy jest elementem typu char.
 *
 * Version: $Id: main.cpp 74 2011-12-11 15:09:47Z s8376@pjwstk.edu.pl $
 */
#include <iostream>
#include <cstdlib>

using namespace std;

void iterate(char** table, int from, int to, int status)
{
    int mainTabIndex = 0, subTabSize, charIndex;

    for (int i = from; i > to; i--) {
        subTabSize = i;
        if (subTabSize < 0) {
            subTabSize *= -1;
        }

        if (subTabSize != 0) {
            if (status == 1) {
                table[mainTabIndex] = new char[subTabSize];
            }
            for (int j = 0; j < subTabSize; j++) {
                switch (status) {
                    case 1: // zasilenie

                        if (i > 0) {
                            charIndex = 65 + from - i + j;
                        } else {
                            charIndex = 65 + from - (i * -1) + j;
                        }

                        table[mainTabIndex][j] = char(charIndex);
                        break;
                    case 2: // wyswietlenie
                        cout << table[mainTabIndex][j] << "\t";
                        break;
                }
            }

            if (status == 3) {
                delete table[mainTabIndex];
            }

            if (status == 2) {
                cout << endl;
            }
        }

        mainTabIndex++;
    }

    if (status == 3) {
        delete[] table;
    }
}

int main()
{
    int rowNubmer, rowNumberRev;

    cout << "Podaj liczbe: " << endl;
    cin >> rowNubmer;

    if (rowNubmer <= 0 || rowNubmer > 26) {
        cout << "Liczba musi być większa od 0 i mniejsza od 27" << endl;
        exit(1);
    } else {
        cout << "Liczba: " << rowNubmer << endl;
    }

    rowNumberRev = rowNubmer * -1;
    rowNumberRev--;

    char** table = new char*[rowNubmer * 2 + 1];

    iterate(table, rowNubmer, rowNumberRev, 1);
    iterate(table, rowNubmer, rowNumberRev, 2);
    iterate(table, rowNubmer, rowNumberRev, 3);

    return 0;
}
